
import java.util.Vector;

/*
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructura de Datos
 * Guatemala, Julio 2012
 * Diego Castillo - 10098
 * Clase en la que se usa la implementacion de la interfaz de un Stack o pila, utilizando la clase 
 * vector para ello y definiendo los metodos y caracteristicas definidas 
 * por la interfaz.  Clase Generica. 
 */

/**
 * 
 */
public class StackVector<E> implements Stack<E> {
    
    //Definicion de la estructura que contendra nuestro stack, en este caso la
    //clase vector. 
    
    protected Vector<E> datos;
    
    
    //Constructor 
    
    
    public StackVector(){
        
        datos = new Vector<E>();
        
    }
    

    /**
     * 
     * Metodo utilizado para guardar elementos en nuestro Stack, osea en nuestro
     * vector
     * pre-condicion:  ninguna
     * pos-condicion:  agrega un elemento al 
     */
    public void push(E item) {
        
        datos.add(item);
        
    }

    /**
     * Metodo utilizado para remover un elemento del stack, retira el ultimo agregado
     * pre-condicion:  Tienen que haber elementos en el stack
     * pos-condicion:  Devuelve el ultimo elemento del stack y lo borra del stack
     */
    public E pop() {
        
        return datos.remove(size()-1);
    }

    /**
     * Metodo que obtiene el ultimo elemento agragado al stack y lo devuelve.
     * pre-condicion:   Tienen que haber elementos en el stack
     * pos-condicion:   Devuelve el ultimo elemento en el stack sin borrarlo. 
     */
    public E peek() {
        
        return datos.get(size()-1);
        
    }
   
    

    /**
     * Metodo utilizado para obtener el tamaño de nuestro stack
     * pre:   ninguna
     * pos:   devuelve el numero de elementos en el stack
     */
    @Override
    public int size() {
        
        return datos.size();
        
    }
    
    /**
     * Metodo utlizado para saber si el stack se encuentra vacio o no
     * pre:   ninguna
     * pos:   devuelve false, si hay elementos en el stack y true si los hay
     */
    public boolean empty() {
        
        return size()==0;      
        
        
    }
    
    
    
    /**
     *  Metodo utilizado para mostrar el estado de nuestro stack, especificamente
     *  los elementos que hay en el
     *  pre:     niguna
     *  pos:     devuelve un string con los elementos en el stack
     */ 
    public String toString(){
                String estado="Datos en el la Pila --->  ";
                for(int i=0;i<datos.size();i++){
                        estado+= datos.get(i).toString() + " ";
                }
                return estado;
        }
    

    
}
